我有以下内容( Server 2005)
DECLARE @L_ID_FOO_BAR INT
BEGIN TRY
SELECT @L_ID_FOO_BAR = IDFOO
FROM BAR
WHERE IDFOO = 5
END TRY
BEGIN CATCH
SELECT @L_ID_FOO_BAR = NULL
END CATCH
在BAR表中,我可以使用IDFOO列(在旧数据库上)或者没有(在一些最近的数据库中)。因此,对于缺少的IDFOO列,我希望保留@L_ID_FOO_BAR = NULL,如果该列存在,请选择相应的IDFOO。
但是,当在没有该列的基础上执行脚本
SQL Server 2012。 有一个包含sql语句的表,由开发人员维护。 CREATE TABLE t
(
id INT PRIMARY KEY CLUSTERED NOT NULL IDENTITY(1, 1)
, sql_statement NVARCHAR(MAX) NOT NULL
, recipient NVARCHAR(MAX) NOT NULL
);
INSERT INTO t
SELECT 'select 1 as one, 2 as two, 3 as three'
, 'some-email-address@host
我有多个包含列'Name‘和'NameEN’的表。
我需要用表单列'Name‘中的值更新列'NameEN’
我知道如何使用以下命令更新单个表
Update Table
set NameEN = Name
我还知道如何获取包含列'NameEN‘的表的列表
SELECT c.name AS 'ColumnName'
,t.name AS 'TableName'
FROM sys.columns c
JOIN sys.tables t ON c.object_
我有一个很长的查询,它重复引用单个字段。
我想重复运行它,但是针对不同的字段。
下面是一个用伪代码编写的简化示例:
*Use #MyField = field1*
select #MyField from mytable1 where #Myfield is not null order by #Myfield desc
然后我想把第一行从
对...=field2执行... = field1命令,然后重新运行
我知道我可以只做查找和替换,但是我能用我描述的方式做一个别名吗?
谢谢,Rob
我一直在试图找出这个动态statement语句的问题所在。显然,当我向它传递一串要插入的值时,它所导致的错误使其解析看起来是正确的,但它表示它与语句中指定的列数不匹配。我附加了插入数据的表定义、dynamic语句和下面的values参数:
M2016_Field_ID列是一个标识列,不应该被插入,与Enabled_ON列一样,该列具有指定当前日期的默认约束。
@valuesList = '(''description'', ''0,0'')'
SET @sql = N' INSERT INTO
摘要:
假设我们有table1,我想在这个表中添加一个名为column1的列。在更新完column1的值之后,请注意,我所说的一切都发生在IF块中。
问题:
如何在没有错误的情况下更新column1值?
IF NOT EXISTS (
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID(N'[dbo].[table1]')
AND name = 'column1'
)
BEGIN
ALTER TABLE table1
ADD column1 BIT
如果列设置无效(大小、数据类型等),我将动态地从C#程序创建SQL调用( Server 17)来更新列。我正在创建一个新列并将数据传输到新列。
我经常会遇到一个错误,说明无效的列名(例如,第3行),即使它遵循create语句,而且整个事件都被包装在一个IF中,甚至大部分时间都没有调用它。
我意识到“原因”是在调用时TEMP列不存在,但是如果实际处理行,它就会存在。任何关于如何解决这个问题的建议都是很棒的。
SQL示例:
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'AD' and C
我有一个场景,要求我首先将表中的列值范围设置为NULL,然后添加逻辑,以便在前面的Update语句之后使用Update语句重新计算新的Null值。最后,我运行最后的比较脚本(在游标中),该脚本将新值插入到表中。
是否需要在每个主命令之间使用GO命令?
示例:
Drop Table1
Update Table2
Set Col1=NULL,Col2=NULL
Insert into Table3 (Col1,Col2)
在每条语句之间使用GO是一种要求吗,因为有时这种方法有效,但最近它给我带来了问题?
谢谢,
我已经创建了两个表
tbl1
CREATE TABLE [dbo].[tbl1]
(
[Costumer ID] [INT] NOT NULL,
[Name of the Costumer] [NVARCHAR](50) NOT NULL,
[Contact Number 1] [NCHAR](11) NULL,
[Contact Number 2] [NCHAR](11) NOT NULL,
[Email Id] [NVARCHAR](50) NULL,
[Address] [NVARCHAR](1000) NOT NULL,
[Du
今天早上我已经检查了很多次,没有找到问题所在。这可能非常简单,当有人指出这一点时,我会觉得自己像个笨蛋。这条SQL会失败什么呢?
-- Get CurrentRowCount
DECLARE @MaxID INT
SELECT @MaxID = ISNULL(MAX(WorkTypeID),0)
FROM caWorkType
ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1)
我得到的错误是:“‘@MaxID’附近的语法不正确”我已经检查过了,并且select语句将@MaxID设置为45。临时表#WorkTyp
假设我有is_return_foo、is_return_bar和is_return_baz列。
如果上述任何列分别设置为true,则需要返回foo、bar、baz列.
CASE WHEN是最好的选择吗?
类似于:
SELECT
CASE is_return_foo WHEN true THEN foo ELSE null
CASE is_return_bar WHEN true THEN bar ELSE null
CASE is_return_baz WHEN true THEN baz ELSE null
another_column
FROM
m
我有列的桌子:1959年、1960年、1961年.2016年;
所有这些列都是nvarchar(255)类型,其中有些列具有空字符串'‘。我想将空字符串更改为空字符串。我写的查询:
DECLARE @empty nvarchar(255);
SET @empty='';
DECLARE @cnt INT = 1959;
WHILE @cnt < 2017
BEGIN
declare @sql nvarchar(1000)
set @sql = 'UPDATE [HDProjEtap1Proba1].[dbo].[TESTGDP] SET [
我有一个查询,我需要将其作为动态查询运行,以输出有意义的列名。例如,如果我直接运行查询,它会正确地返回数据。但是,如果我使用下面的代码,它会显示:
The name '
SELECT (CASE WHEN A.Domain IS NOT NULL THEN A.Domain ELSE B.Domain END) AS [Domain],
(CASE WHEN A.Email IS NOT NULL THEN A.Email ELSE B.Email END) AS [Email],
我在Server数据库中有一个表,表中有两个列,PKColumn1和Column2。该表具有聚集索引,聚集在PKColumn1上。
如果对此表使用以下查询,则执行计划将显示聚集索引查找。
SELECT PKColumn1
FROM Table
WHERE PKColumn1 = 1
它也会这么做。
如果对此表使用以下查询,则还希望执行计划显示聚集索引查找。
DECLARE @PKColumn1 INT = 1;
SELECT PKColumn1
FROM Table
WHERE (PKColumn1 = @PKColumn1 OR @PKColumn1 IS NULL)
但是,我现在从执行计划
我有一个包含空值的表,但问题是有些值实际上是字符串" NULL“,而不是实际的NULL,所以当您尝试类似的
where date is null
它将不返回具有“空”字符串的字段。
我需要做的是运行整个表的更新,该更新将将所有字符串“NULL”转换为实际的空值。"NULL“字符串发生在表的所有列中,因此需要更新的不仅仅是1列。我不知道如何处理这种情况。我想我可能需要使用一个循环,因为我有很多列,但是可能有一个简单的解决方案,而不必使用循环。解决这个问题最好的办法是什么?
我在server 2012上执行下面的语句。但是它总是执行,即使列不存在
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
Print 'in'
Update Table1 set Age = Null
End
我也试过在下面
if exists(select * from sys.columns
where Name = 'Age' a
我试图为允许的最大处理时间创建一个参数,给它一个10分钟的值,然后将其他进程的处理时间与参数值进行比较。这将包括创建一个新列,如果超过参数时间,将在该列中提及该列。
为此,我使用以下方法:
declare @sql nvarchar(1000)
declare @ProcessTime int
declare @maxProcessTime int
set @sql = N'
SELECT ID, Type, Location, StartTime, EndTime,
ProcessingTime =
(CASE
WHEN EndTime IS NULL then datedi