我一直在阅读表变量和临时表之间的差异,并偶然发现表变量的以下问题.我没有看到我追求的文章中提到的这个问题.
我通过XML数据类型传递一系列PK,并在两个临时表结构中成功创建记录.当我尝试更新临时表中的其他字段时,表变量失败,但临时表没有更新语句的问题.需要做些什么?我想利用Table Variables承诺的速度提升......
以下是SP片段和结果:
CREATE PROCEDURE ExpenseReport_AssignApprover
(
@ExpenseReportIDs XML
)
AS
DECLARE @ERTableVariable TABLE ( ExpenseReportID INT,
ExpenseReportProjectID INT,
ApproverID INT)
CREATE TABLE #ERTempTable
(
ExpenseReportID INT,
ExpenseReportProjectID INT,
ApproverID INT
)
INSERT INTO @ERTableVariable (ExpenseReportID)
SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @ExpenseReportIDs.nodes('/Root/ExpenseReportID') as ParamValues(ID)
INSERT INTO #ERTempTable (ExpenseReportID)
SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @ExpenseReportIDs.nodes('/Root/ExpenseReportID') as ParamValues(ID)
UPDATE #ERTempTable
SET ExpenseReportProjectID = ( SELECT TOP 1 ExpenseReportProjectID
FROM ExpenseReportItem
WHERE(ExpenseReportID = #ERTempTable.ExpenseReportID))
UPDATE @ERTableVariable
SET ExpenseReportProjectID = ( SELECT TOP 1 ExpenseReportProjectID
FROM ExpenseReportItem …Run Code Online (Sandbox Code Playgroud) 我试图添加一个列(MSSQL 2005)到一个表(Employee)与默认约束的另一个表(Department)的主键.然后我将把这个列作为该表的FK.基本上,如果没有提供DepartmentID,这将根据部门名称将新员工分配给基础部门.
这不起作用:
DECLARE @ErrorVar INT
DECLARE @DepartmentID INT
SELECT @DepartmentID = DepartmentID
FROM Department
WHERE RealName = 'RocketScience'
ALTER TABLE [Employee]
ADD [DepartmentID] INT NULL
CONSTRAINT [DepartmentIDOfAssociate] DEFAULT (@DepartmentIDAssociate)
SELECT @ErrorVar = @@Error
IF (@ErrorVar <> 0)
BEGIN
GOTO FATAL_EXIT
END
Run Code Online (Sandbox Code Playgroud)
生产,测试和开发数据库已经变得不同步,DepartmentName ='RocketScience'的DepartmentID可能相同或不同,所以我不想只说DEFAULT(somenumber).无论我采用哪种方式攻击问题,我都会继续"在ALTER TABLE语句中不允许使用变量".
这样做的正确方法是什么?我已经尝试嵌套select语句,它获得"在此上下文中不允许子查询.只允许使用标量表达式."
另外,我可以在一个语句中填充列值而不是执行
{ALTER null}
{Update values}
{ALTER not null}
步骤.我读了一些有关WITH VALUES命令的内容,但无法使其工作.谢谢!!!
您如何通过SSRS 2005显示正在运行的GROUP计数?
我有一个报告,其中有n个组,其中源数据必须保持匿名,我希望该组的标题中包含该数字...
因此,而不是像这样的组头中的名称...
员工 - 约翰史密斯
员工 - 玛丽斯温
...
员工 - 艾哈迈德萨尔
我想......
员工#1
员工#2
......
员工#n
谢谢!!!
问候,我有一个表单,员工在多行文本框中输入注释,限制为4000个字符.我将行设置为8(显然是一个任意数字).
当主管查看注释时,文本框被禁用,因此无法修改员工注释.
问题是当数据扩展到第8行以下时.由于文本框被禁用,因此无法移动滚动条,并且主管无法查看所有注释.如果我将文本框和数据绑定隐藏到主管的标签中,没有任何换行符被维护,并且写得好的段落变成句子上的最大运行...
有没有办法启用滚动条使文本禁用?
有没有办法保留标签中条目的结构?
我创建了一个折线图,显示一个月内发送的不同类型的消息(电子邮件,打印,语音),这些消息在图表上显示得很好.
是否有一种简单的方法可以添加另一行,它总计3系列的值而不更改SQL?
我在SQLServer 2005中存储事件,事件发生的时间很重要,必须存储在日期库中.在where子句中编写日期范围检查的最快方法是什么,以确保选择当天的所有内容?
目前,当传递@DateStart和@DateEnd时,我将@DateStart设置为午夜,并将@DateEnd设置为午夜之前的最后一个瞬间,作为当天抓住每个可能事件的第一件事.
IF (@DateStart IS NOT NULL)
BEGIN
SET @DateStart = CAST (
( CAST (DATEPART (yyyy,@DateStart) AS NVARCHAR(4)) +'/'+
CAST (DATEPART (mm,@DateStart) AS NVARCHAR(2)) +'/'+
CAST (DATEPART (dd,@DateStart) AS NVARCHAR(2)) +' '+
'00:00:00.000'
)
AS DATETIME)
END
IF (@DateEnd IS NOT NULL)
BEGIN
SET @DateEnd = CAST (
( CAST (DATEPART (yyyy,@DateEnd) AS NVARCHAR(4)) +'/'+
CAST (DATEPART (mm,@DateEnd) AS NVARCHAR(2)) +'/'+
CAST (DATEPART (dd,@DateEnd) AS NVARCHAR(2)) +' '+
'23:59:59.997'
)
AS DATETIME
)
END
Run Code Online (Sandbox Code Playgroud)
所以where子句很容易阅读:
WHERE(EventDate> = @DateStart …
sql-server ×2
t-sql ×2
alter-table ×1
asp.net ×1
asp.net-3.5 ×1
c# ×1
default ×1
sql ×1
ssrs-2008 ×1